#ifndef VECTOR3D_H
#define VECTOR3D_H

#include <QString>
#include "angulo.h"
#include "punto3d.h"
#include "geometria_global.h"

class GEOMETRIA_EXPORT Vector3d 
{
public:
    Vector3d();
    Vector3d(double x, double y, double z);
    Vector3d(const Punto3d& puntOrigen, const Punto3d& puntoExtremo);
    Vector3d(double modulo, const Angulo& azimut, const Angulo& colatitud);
    ~Vector3d();

    bool operator==(const Vector3d& otroVector) const;

    QString toString();

    void sumar(const Vector3d& otroVector);
    void desplazarPunto(Punto3d& p) const;

    Punto3d getPuntoExtremo() const;

    void setCoordenadas(double x, double y, double z);
    void setCoordenadasEsfericas(double modulo, const Angulo& azimut, const Angulo& cenit);

    double getModulo();
    Angulo getAzimut();
    Angulo getColatitud();    

    void setModulo(double modulo);
    void normalizar();
    void girar(const Angulo& giroAzimut, const Angulo& giroCenit);
    void multiplicar(double factor);
    bool esNulo();

private:
    double calcularAzimutRadianes(double x, double y, double z);
    double calcularColatitudRadianes(double x, double y, double z);

    void arreglar();

private:
    double modulo;
    Angulo azimut;
    Angulo colatitud;
};

#endif // VECTOR3D_H
